class Solution {
    List<String> ret= new ArrayList<>();
    public List<String> binaryTreePaths(TreeNode root) {
        dfs(root,new StringBuffer());//这里直接写为StringBuffer可以避免String和StringBuffer的转换
        return ret;
    }
    public void dfs(TreeNode root,StringBuffer _path) {//全局_path
        StringBuffer path = new StringBuffer(_path);//局部path
        //递归出口
        if(root==null)  return;

        //函数体
        //无论是不是叶子节点都要添加数字（如果不是叶子节点还要多加一个"->")
        path.append(Integer.toString(root.val));
        //叶子节点
        if(root.left==null&&root.right==null) {
            ret.add(path.toString());//StringBuffer转为String
            return;
        } else {
            //非叶子节点
            path.append("->");
            dfs(root.left,path);
            //如果没有局局变量path那么就需要恢复上一步
            dfs(root.right,path);
        }
    }
}
